package com.zhiche.lisa.bms.service.price;


import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zhiche.lisa.bms.dao.model.fee.FeePayable;
import com.zhiche.lisa.bms.dao.model.price.PricePurchase;
import com.zhiche.lisa.bms.pojo.dto.price.PricePurchaseAndDtlDTO;
import com.zhiche.lisa.bms.pojo.vo.fee.FeePayableVO;
import com.zhiche.lisa.bms.pojo.vo.price.PricePurchaseVO;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 支付价格 服务类
 * </p>
 *
 * @author liuanshun
 * @since 2018-08-29
 */
public interface PricePurchaseService extends IService<PricePurchase> {
    /**
     * 支付价格分页列表
     *
     * @param page
     * @return
     */
    Page<PricePurchase> queryPurchasePage(Page<PricePurchase> page);

    /**
     * 支付价格列表
     *
     * @param condition
     * @return
     */
    List<PricePurchase> queryPurchaseList(Map<String, Object> condition);

    /**
     * 获取标准价
     *
     * @param pricePurchase
     * @return
     */
    BigDecimal getExtPurchasePrice(PricePurchase pricePurchase);

    /**
     * 根据id号获取支付价格
     *
     * @param ids
     * @return
     */
    List<PricePurchase> getPricePurchaseListByIds(List<Long> ids);

    /**
     * 新增支付价格信息
     *
     * @param pricePurchase
     */
    void insertPurchase(PricePurchase pricePurchase);

    /**
     * 新增支付价格信息
     *
     * @param pricePurchaseAndDtlDTO
     */
    void importPurchaseAndDtl(PricePurchaseAndDtlDTO pricePurchaseAndDtlDTO);

    /**
     * 批量更新支付价格
     *
     * @param pricePurchaseAndDtlDTO
     * @return
     */
    List<String> updatePurchases(List<PricePurchase> pricePurchaseAndDtlDTO);

    /**
     * 根据运输任务更新数据所有列数据
     *
     * @param pricePurchase
     * @return
     */
    Integer updateOrInsertPurchaseByShipTask(PricePurchase pricePurchase);

    /**
     * 根据车架号修改暂估价
     *
     * @param feePayable
     */
    void updateExtPurchasePriceByItemUidNoTenant(FeePayable feePayable);

    /**
     * 根据运输任务更新exlel导入数据
     *
     * @param pricePurchase
     * @return
     */
    void updatePurchaseExlByShipTask(PricePurchase pricePurchase);

    /**
     * 根据taskCode删除指定信息
     *
     * @param pricePurchase
     * @return
     */
    Integer deletePurchaseByShipOrderItemId(PricePurchase pricePurchase);

    /**
     * 生效支付价格
     *
     * @param id
     * @param token
     */
    void enablePurchase(Long id, String token);

    /**
     * 根据收入价格标准价为空的数据重新获取价格
     */
    void getPricePurchase();

    /**
     * 根据运单货物明细ID查询
     *
     * @param shipOrderItemId
     * @return
     */
    PricePurchase queryPricePurchase(Long shipOrderItemId);

    /**
     * 修改人送价格
     *
     * @param pricePurchaseVO
     */
    void updateSendDriverPurchasePrice(PricePurchaseVO pricePurchaseVO);

    /**
     * 获取慧运车需要的信息
     *
     * @param voList
     * @return
     */
    List<FeePayableVO> getHunyuncheInfo(List<FeePayableVO> voList);

    /**
     * 获取加油站油价
     *
     * @param vmCode
     * @param effctDate
     * @return
     */
    BigDecimal getPertrolOilPrice(String vmCode, Date effctDate);

    /**
     * 根据人送指令号生成账款信息
     *
     * @param orderCodeList
     */
    void replenCreateFeePayableForSendDriver(List<String> orderCodeList);

    /**
     * 处理人送数据
     */
    void dealSendPriceToFee();

    /**
     * 获取未取消和未删除以及价格数据
     *
     * @param shipmentCode
     * @return
     */
    PricePurchase getPricePurchaseByShipmentCode(String shipmentCode);

    /**
     * 重新推送otm价格到otm
     *
     * @param orderCodeList - 指令集合
     * @param isReCompute   - 是否重新计算价格
     */
    void repushHycPriceToOtm(List<String> orderCodeList, String isReCompute);
}
